home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga CD-Sensation: Golden Games
/
Amiga CD-Sensation - Ausgabe 2 - Golden Games (1996)(GTI - Schatztruhe)(DE)[!].iso
/
Various
/
CoreWars
/
KapitelII
< prev
next >
Wrap
Text File
|
1987-12-26
|
89KB
|
1,969 lines
______________________________________________________________________
| |
| ANMERKUNG ZUR DISKETTENVERSION DER ANLEITUNG: |
| |
| Die beiden Abbildungen, auf die im Abschnitt 2.6 und 2.8 zurückge- |
| griffen wird, sind nur in der gedruckten Anleitung enthalten. Ab- |
| bildung 1 stellt die Statusanzeige eines Kampfes dar, Abbildung 2 |
| zeigt die Zeitlupenanzeige (Trace-Menupunkt). |
|______________________________________________________________________|
K a p i t e l 2 : C o r e W a r s
__________________________________________
2.1 Starten und Installieren
____________________________
2.1.1 Allgemeines
-----------------
Dieses Programm ist Shareware. Es darf ausser für gewerbliche Zwecke
frei kopiert und verbreitet werden. Der Preis für die Weitergabe darf
den Betrag für die Diskette und die Kopierarbeit nicht überschreiten!
Das Programm darf nur weitergegeben werden, wenn mindestens die
folgenden Dateien in einem Directory oder auf einer Diskette enthalten
sind:
CoreWars
System (Dir)
View
LiesMich
Beispiele (Dir)
Mice
Mausefalle
Gnom
Knirps
Chang
Anleitung (Dir)
Einleitung
KapitelI
KapitelII
KapitelIII
Anhang
Wer das Programm benützt, sollte im Sinne des Shareware-Gedankens
sFr. 30.-- (oder sFr. 33.-- ausserhalb der Schweiz in der jewei-
ligen Landeswährung) an diese Adresse senden:
Unicorn Systems
Bernstrasse 67
CH-4852 Rothrist
Er erhält dann die etwa 70 Seiten umfassende, deutsche Anleitung in
TeX-Qualität auf Papier sowie die neuste Version des Programmes. Er
wird ausserdem registrierter Benützer und wird von zukünftigen Updates
in Kenntnis gesetzt.
2.1.2 Installierung
-------------------
Auf Diskette:
Core Wars ist von uns in zwei Versionen in Umlauf gebracht worden. Die
eine besteht aus einer autostartfähigen Diskette mit allen nötigen
Verzeichnissen und Dateien. Die zweite Version besteht aus einem
einzigen Verzeichnis auf einer handelsüblichen Public Domain Diskette
(Fred Fish, FAUG, Kickstart, AUGE 4000, AUGS u.s.w.). Um aus den Files
in einem solchen Verzeichnis eine autostartfähige Core Wars Diskette
herzustellen, müssen verschiedene Vorarbeiten geleistet werden. Auf
einer lauffähigen Core Wars Diskette sollten die unten aufgeführten
Verzeichnisse und Dateien vorhanden sein, wobei die mit einem Stern (*)
gekennzeichneten Dateien vom Core Wars System unbedingt benötigt werden.
Am Einfachsten wird dazu eine original Workbench Diskette (ab Version
1.2) kopiert und auf der Kopie werden dann die überflüssigen Dateien
gelöscht.
*CoreWars Das Hauptprogramm.
*LiesMich Allgemeine Informationen über Core Wars.
Redcode (Dir) Für eigene Programme vorgesehen.
c (Dir) CLI-Befehle und Utilities der Workbench
LoadIFF Anzeigen von Bildern im IFF-Format (siehe Anleitung).
CorePic Titelbild von CoreWars (nur bei Autostart sichtbar).
Beispiele (Dir) Ein Verzeichnis mit einigen Programmbeispielen.
Mice Siegerprogramm Welmeisterschaft 1986
Mausefalle Schlägt Mice!
Gnom \
Knirps > weitere Beispielprogramme, siehe Anleitung.
Chang /
*System (Dir) Einige Hilfsprogramme der Workbench.
*Einstellungen Einstellungsdatei für den Core Wars Editor.
*View Anzeigen von Textdateien (z.B. diesen Text).
*Fonts (Dir) Zeichensätze, die von Core Wars benötigt werden.
*Diamond.font \
*Diamond (Dir) > Zeichensatz 'Diamond 12'
*12 /
Anleitung (Dir) Enthält Die Anleitung in Form von Textdateien.
Einleitung
KapitelI
KapitelII
KapitelIII
Anhang
*libs Betriebssystem: Funktionsbibliotheken.
*icon.library
*diskfont.library
Auf Festplatte:
Das Programm "CoreWars" kann auf der Harddisk an einem beliebigen Platz
untergebracht werden. Es benötigt allerdings die unter 2.1 mit einem
Stern (*) bezeichneten Dateien in den entsprechenden Verzeichnissen.
Starten von Core Wars:
Core Wars kann von der Workbench durch die Maus oder vom CLI aus durch
den Befehl "run CoreWars" gestartet werden.
2.2 Eine erste Anwendung
________________________
Dieser und auch teilweise der nächste Abschnitt nehmen in der Anleitung
eine Sonderstellung ein. Um die ersten in Kapitel eins behandelten
Beispielprogramme gegeneinander kämpfen zu lassen, müssen Sie sich hier
ein Grundwissen in der Bedienung von Core Wars aneignen. Wenn sie
diesen Abschnitt durchgelesen haben, können Sie alle Kampfprogramme des
ersten Kapitels laufen lassen. Um aber alle Fähigkeiten des Core Wars
Programmes ausnützen zu können, sollten Sie nach dem ersten Kapitel
wieder hier mit dem Lesen weiterfahren.
2.2.1 Die Menüs
---------------
Nachdem Core Wars gestartet ist, erscheint in der Mitte des hellgrauen
Hauptbildschirmes ein Textkasten. Um ihn verschwinden zu lassen, können
Sie einfach mit der Maus irgendwo in diesen Kasten hineinklicken. Nun
ist die Bahn frei für den ersten Kampf zwischen zwei Redcode-Programmen.
Am oberen Rand des Bilschirmes sehen Sie einen Titelbalken mit dem Namen
des Programmes. Drücken Sie nun die rechte Maustaste und sehen Sie sich
die Menüpunkte an. Ganz links haben wir unter "Amiga" den Menüpunkt
"Core Wars", hinter dem sich einige Infos zum Programm verstecken.
Der zweite Menustreifen enthält unter anderen die Punkte "Editor",
"Assembler" und "Kampf". Mit dem Editor können Sie die Programmtexte
schreiben und verändern. Diese Texte werden dann mit dem Assembler in
einen für MARS ausführbaren Code übersetzt (assembliert) und
schliesslich können diese übersetzten Programme mit dem Menüpunkt
"Kampf" gegeneinander antreten.
Hier sind die drei Punkte einer Redcode-Programmentwicklung aufgeführt:
1. Das Programm wird wie ein normaler Text geschrieben und auf Diskette
abgespeichert. Dieser Text wird auch "Quelltext" oder "Quelldatei"
genannt.
2. Der Quelltext wird von einem Assembler in einen von MARS
ausführbaren Code, den sogenannten "Objektcode" oder die "Objektdatei"
verwandelt und dieser Code wird wiederum auf Diskette gespeichert.
3. Zwei dieser Objektdateien werden schliesslich von MARS eingelesen
und liefern sich dann ein Duell im Speicher von MARS.
2.2.2 Der erste Schritt: Ein Programm schreiben
-----------------------------------------------
Der Editor dient dazu, Programmmtexte zu schreiben und schon bestehende
Programmtexte zu verändern (editieren). Anhand eines Beispieles sehen
Sie, wie ein schon bestehender Programmtext eingelesen und verändert
werden kann.
Bewegen Sie die Maus auf den Menüpunkt "Editor" und lassen Sie den
rechten Mausknopf los. Augenblicklich erscheint ein neues Fenster und
in diesem Fenster heischt ein weisses Rechteck um ihre Aufmerksamkeit.
Dieses Rechteck wird Requester (englisch für Rückfrage) genannt und
dient dazu, den Namen eines Programmtextes einzugeben. Klicken Sie mit
der Maus einmal in den schmalen, dunkleren Balken in diesem Rechteck.
Sie sehen, dass am linken Ende des Balkens ein kleines weisses Viereck
erscheint. Dieses Viereck, der Cursor, zeigt Ihnen, an welcher Stelle
eines Textes sich der nächste Druck auf eine Taste auswirkt. Tippen Sie
nun den Namen "Beispiele/Gnom" ein und klicken Sie mit der Maus in das
grüne Kästchen, das mit OK gekennzeichnet ist. Der Computer sucht jetzt
im internen Laufwerk (df0:) nach einem Verzeichnis namens "Beispiele"
und dort nach einer Textdatei "Gnom".
Wenn Sie den Namen richtig eingegeben haben und wenn die verlangte Datei
wirklich auf der Diskette vorhanden war, wird der Programmtext nun
eingelesen. Der Requester verschwindet und der Text wird angezeigt.
Wieder sehen Sie einen Cursor in Form eines kleinen weissen Vierecks
ganz links oben im Editorfenster. Mit den vier Pfeiltasten können Sie
den Cursor in alle vier Himmelsrichtungen in Einzelschritten
verschieben. Sobald Sie eine Buchstabentaste betätigen, erscheint das
entsprechende Zeichen an der Stelle, auf die der Cursor zeigt, das
Zeichen wird so in den Text eingefügt. Wenn sich unter dem Cursor schon
ein Zeichen befand, werden dieses und alle noch in derselben Zeile
stehenden Zeichen nach rechts verschoben.
Eine andere Möglichkeit, den Cursor zu verschieben, besteht durch die
Maus. Wenn Sie mit dem Mauszeiger auf eine beliebige Position im
angezeigten Text fahren und dann den linken Mausknopf drücken, wird der
Cursor unter den Mauszeiger gesetzt. Sehr oft ist dies der einfachste
Weg, den Cursor auf ein bestimmtes Wort im Programmtext zu
positionieren.
Beim Redcode Editor handelt es sich um einen sogenannten "Full Screen -
Editor". Das bedeutet, dass das Editorfenster nur einen Ausschnitt des
gesamten Textes anzeigt, der bis zu vierhundert Zeilen lang sein darf.
Probieren Sie folgendes aus: Zuerst laden Sie mit dem Menupunkt
"Einlesen" die Quelldatei "Gnom" im Verzeichnis "Beispiele" in den
Textspeicher. Hängen Sie an diesen Text anschliessend einen anderen
Quelltext (z.B. Mice) mit dem Menupunkt "Einfügen" an und wiederholen
den Vorgang einige Male. Verschieben Sie nun den Cursor durch
wiederholtes Betätigen der Pfeiltasten nach unten. Wenn Sie am unteren
Rand des Bildschirmes angekommen sind und Sie versuchen, den Cursor über
diesen Rand hinauszubewegen, so rollt der ganze Inhalt der Anzeige
Zeilenw eise durch das Editorfenster. Stellen Sie sich das Ganze so
vor, als würden Sie über eine Seite eines Buches ein Blatt weisses
Papier mit einem kleinen rechteckigen Ausschnitt legen und dieses dann
nach oben oder unten verschieben. Diese Verschiebung erfolgt bei
unserem Editor eben durch die Cursortasten oder, wie Sie später noch
sehen werden, durch verschiedene Kommandos, die es erlauben, sich unter
Anderem auch Seitenweise durch den Text zu bewegen.
Weitere gundlegende möglichkeiten, einen Programmtext zu verändern, sind
die Tasten "Delete" und "Backspace". Diese dienen dazu, ein Zeichen
links oder direkt unter dem Cursor zu löschen. "Delete" (beim Amiga
2000 und 500 die grosse Taste gleich links von der Help-Taste, beim
Amiga 1000 die Taste ganz rechts oben auf dem Zeichenblock) löscht das
Zeichen, das unmittelbar unter dem Cursor steht. Wenn sich weiter
rechts mehrere Zeichen befinden, rücken alle weiteren um eine Stelle
nach links zum Cursor nach . "Backspace" ist bei allen Amiga-Modellen
die Taste, die mit dem nach links weisenden Pfeil gekennzeichnet ist.
Beim Amiga 2000 und 500 befindet sie sich links von der Delete-Taste,
beim Amiga 1000 ist es die grosse Taste ganz rechts oben. Probieren Sie
diese Tasten ruhig aus, indem Sie das Programm "Gnom" nach Ihrem
Gutdünken verändern. Wenn Sie eine neue Zeile eines Textes eingetippt
haben, können Sie die RETURN-Taste drücken. Der Cursor steht dann am
Beginn der nächsten Zeile. Wenn sich der Cursor bei m RETURN mitten in
einer Zeile befand, werden die restlichen Zeichen auf die nächste Zeile
übernommen. Diesen Vorgang können Sie durch drücken der
"Backspace"-Taste wieder rückgängig machen.
Eine kleine Exkursion mit der Maus im Menubalken fördert noch einige
Menupunkte mehr zutage. Mit deren Hilfe können Sie bestimmte Wörter in
einem Text suchen und durch andere ersetzen, ganze Blöcke von Text
löschen und an einer anderen Ste lle wieder einfügen, die
Funktionstasten mit vielbenützten Wörtern belegen und vieles mehr.
Alle diese Möglichkeiten werden ausführlich im Abschnitt 2.3 (Schreiben
eines Kampfprogrammes) behandelt.
Natürlich sollten Sie noch wissen, wie Sie ein verändertes oder neu
geschriebenes Kampfprogramm wieder auf Diskette zurückspeichern können.
Im Menubalken finden Sie ganz links den Menustreifen "System" und in
diesem die Menupunkte "Abspeichern" und "Abspeichern als...". Der
erste Menupunkt dient dazu, den Programmtext unter dem gleichen Namen,
mit dem er eingelesen wurde, wieder auf Diskette zu schreiben. Aber
Vorsicht: Die alte Version des Programmtextes auf der Diskette mit
diesem Namen wird dabei überschrieben und geht somit verloren.
Der zweite Menupunkt, "Abspeichern als...", lässt das Abspeichern eines
Programmes unter einem neuen Namen zu. Wählen Sie diesen Menupunkt
probehalber einmal an. Wie beim Starten des Editors erscheint wieder
ein Rückfragekasten, der Sie um einen Dateinam en bittet. Klicken Sie
wieder in den Textbalken und geben Sie einen neuen Namen ein, z. B.
"Beispiele/MeinGnom". Im Verzeichnis "Beispiele" auf der internen
Diskette befindet sich nun eine neue Textdatei mit diesem Namen. Auch
sie kann wieder eingelesen, verändert und abgespeichert werden.
Noch eine Bemerkung zum Editor: Sie können durch ihn beliebige
Programmtexte verändern, also auch alle Redcode Quelldateien, die im
Verzeichnis "Beispiele" vorhanden sind. Wir haben vorhin ein solches
Beispielprogramm eingelesen: "Gnom". Wenn Sie wie emp fohlen einige
Experimente angestellt haben, sollten Sie den "Gnom" auf keinen Fall
wieder unter dem gleichen Namen abspeichern, weil sonst das
ursprüngliche (und funktionsfähige) Programm verlorengeht.
Wenn Sie den Editor nach getaner Arbeit wieder verlassen wollen, wählen
Sie im Menustreifen "System" den Punkt "Abbrechen" an. Der Menubalken
des Editors wird wieder durch den des Core Wars Programmes ersetzt und
der Bildschirm erstrahlt in seinem gewohnten Grau.
2.2.3 Der zweite Schritt: Einen Programmtext assemblieren
---------------------------------------------------------
Während der Lektüre des ersten Kapitels werden Sie schon Ihre ersten
Kampfprogramme schreiben. Um diese dann auch gegeneinander kämpfen zu
lassen, müssen sie in einer für das MARS verständlichen Form vorliegen -
die Programmtexte müssen assembliert oder übersetzt werden. Unser
Beispiel "Gnom" liegt zwar schon in assemblierter Form vor, aber wir
werden den Vorgang jetzt nochmals nachvollziehen.
Wählen Sie im Menubalken von Core Wars unter "Action" den Menupunkt
"Assembler" an. Ein Requester ähnlich dem, der Sie schon beim Editor
kennengelernt haben, fragt nach dem Namen des Programmtextes. Klicken
Sie wie gehabt mit der Maus in den schmalen Textbalken und geben Sie
"Beispiele/Gnom" ein. Jetzt können Sie entweder mit der Maus in das
grüne OK-Kästchen (auch Gadget genannt) klicken oder einfach die
Return-Taste betätigen. Wenn der Text auf der Diskette gefunden wurde,
erscheinen in kurzen Abständen Kommentare in Form von Textzeilen auf dem
Bildschirm. Diese Zeilen teilen Ihnen mit, was der Assembler im
Augenblick mit dem Programmtext anstellt und sie können zur Fehlersuche
in einem eigenen Programm recht hilfreich sein.
Es wird vor allem bei Ihren ersten eigenen Programmen selten vorkommen,
dass Ihr Programmtext gleich auf Anhieb fehlerfrei übersetzt wird. Wenn
der Assembler ein Programm nicht übersetzen kann, wird der Vorgang der
Assemblierens sofort abgebrochen und in der Mitte des Bildschirmes wird
ein Textkasten angezeigt, der Ihnen beschreibt, in welcher Zeile des
Programmes welcher Fehler aufgetreten ist. In diesem Fall bleibt nur
noch eins: Editor starten und den Fehler korrigieren. Hilfestellung bei
der Fehlersuche leistet Ihnen der Abschnitt 2.9, "Fehlermeldungen des
Assemblers".
Wenn der Programmtext erfolgreich übersetzt wurde, verlangt wiederum ein
Requester die Eingabe eines Namens, unter dem der auf MARS lauffähige
Programmcode auf Diskette gespeichert werden soll. Haben Sie es
bemerkt? Der beim Einlesen des Programmtextes verwendete Namen bleibt
erhalten und an den ursprünglichen Namen wurde die Endung '.prg'
angehängt. Diese Endung dient dazu, einen Programmtext von einem
lauffähigen Kampfprogramm, dem Objektcode, zu unterscheiden. Sie können
natürlich einen ganz anderen Namen für das übersetzte Programm
verwendet, indem Sie einfach den angebotenen Namen verändern. So ist
auch die Endung '.prg' nicht zwingend, Sie können beispielsweise ihre
Objektdateien alle mit der Endung '.obj' abspeichern, um sie zu
unterscheiden. Klicken Sie nun mit der Maus in das grüne OK-Kästchen,
damit das übersetzte Programm auf die Diskette geschrieben wird.
2.2.4 Der erste Kampf
---------------------
Die übersetzten Programme müssen nun ihre Feuerprobe bestehen: können
sie sich im direkten Kampf gegen andere Redcodeprogramme behaupten? Die
Antwort erhalten Sie durch das Herz des Core Wars Programmes, MARS.
Wir werden als erstes zwei typische Redcodeprogramme gegeneinander
antreten lassen: "Gnom" und "Knirps". Schalten Sie dazu die Optionen
"Trace" (Zeitlupe) und "Status" (verschiedene Statusanzeigen) aus, weil
diese den Kampf zwischen den Programmen unnöti g in die Länge ziehen
würden. Dies erreichen Sie, indem Sie im Menustreifen "Optionen" die
Menupunkte "Trace" und "Status" je einmal anwählen. Dadurch
verschwinden die Haken, die vor den Menupunkten standen und anzeigten,
dass die beiden Optionen eingesch altet waren. Die Option "Grafik"
sollte aber aktiviert bleiben, weil sie den gesamten MARS-Speicher auf
einmal auf dem Bildschirm darstellt.
Wenn Sie dies erledigt haben, können Sie im Menustreifen "Action" den
Punkt "Kampf" anwählen. In der Mitte des Bildschirmes erscheint ein
grosser Requester mit zwei Textbalken. Geben Sie in diese beiden Balken
je einen der Programmnamen ein, in den ersten "Beispiele/Gnom.prg" und
in den Zweiten "Beispiele/Knirps.prg". Anschliessend klicken Sie mit
der Maus in das grüne OK-Kästchen rechts unten im Requester, um die
Eingaben abzuschliessen und den Kampf zu beginnen.
Die zwei Kampfprogramme werden eingelesen und auf dem Bildschirm tritt
die Grafikanzeige in Aktion. Sie besteht aus einem grossen, anfänglich
schwarzen Fenster mit dem Titel "Core Wars - Grafik". Die schwarze
Fläche dieses Fensters stellt den gesamten MARS-Speicher von 8000 Zellen
auf einmal dar. Jede Zelle wird durch einen kleinen, länglichen Punkt
in diesem Fenster repräsentiert. An den letzten Punkt der untersten
Zeile des Grafikfensters schliesst sich in Gedanken der erste Punkt der
obersten Zeile an, analog der ringförmigen Struktur des MARS
Speicherfeldes. Die Punkte können vier verschiedene Farben annehmen,
die zeigen, was mit der entsprechenden Speicherzelle im Augenblick
geschieht. Diese Farben sind rot, grün, hellrot und hellgrün. Sie
werden es schon erraten haben: Rote und grüne Farbtöne stehen jeweils
für ein Programm. Links und rechts oben auf dem Bildschirm stehen
übrigens die Namen der Programme in ihrer Farbe, in der sie in der
Speichergrafik erscheinen. Falls sie nur 512 KByte Speicher haben, kann
es vorkommen, dass die Namen nicht hingeschrieben werden. Für diesen
Fall ist es wichtig zu wissen, dass das im oberen Textbalken des
Requesters eingegebene Programm die grünen Farbtöne hat, das zweite
also die roten.
Ein roter Punkt auf der Anzeige bedeutet, dass ein Programmbefehl des
roten (rechten) Programmes diese Speicherzelle verändert hat. Dies kann
durch einen der Redcode-Befehle MOV, ADD, SUB oder DJN geschehen. Ein
hellroter Punkt bezeichnet die Programmzei len, die schon von einem
Programmzeiger bearbeitet worden sind. Gleiches gilt auch für das grüne
Programm, dessen Namen auf der linken Seite des Bildschirmes angezeigt
wird. So können Sie unterscheiden, welche Zellen von Ihrem Programm
verändert wurden und wo sich der Programmzeiger gerade befindet. Es ist
faszinierend, einem solchen Kampf zweier Programme zuzusehen. Durch die
visuelle Umsetzung des Geschehens im Speicher kann man den Verlauf der
Schlacht hautnah miterleben. Vor dem schwarzen Hintergrund der noch
unveränderten Speicherzellen wälzt sich "Knirps", einen hellroten
Streifen von bearbeiteten Zellen hinterlassend, mit hoher
Geschwindigkeit durch den Speicher. Gleichzeitig beginnt "Gnom" mit der
systematischen Bombardierung des Spielfeldes mit DAT 0 - Bomben. Wer
wird den Kampf gewinnen? Wenn "Gnom" mit seinem Granatfeuer "Knirps"
erreichen kann, bevor er selbst von "Knirps" überrollt wird, ist das
Duell zu seinen Gunsten entschieden. Sollte umgekehrt "Gnom" von
"Knirps" zuerst getroffen werden, stehen die Chancen gut für "Knirps",
der auf diese Weise ein Unentschieden herausholen kann. Damit haben Sie
diese Einführung ins Core Wars System erfolgreich gemeistert und können
mit dem Lesen im ersten Kapitel weiterfahren. Scheuen Sie sich nicht,
Core Wars auf Herz und Nieren auszuprobieren, wann immer Sie ein neues
Kampfprogramm testen wollen.
2.3 Schreiben eines Kampfprogrammes
___________________________________
In diesem Abschnitt werden zwei verschiedene Themen behandelt: Wir
machen Sie zum Einen mit der Bedienung des Core Wars Editors vertraut
und wir zeigen Ihnen zum Andern, welche Grundsätze Sie beachten müssen,
wenn Sie ein Redcodeprogramm schreiben wollen. Im Gegensatz zu
Abschnitt 2.2 ("Eine erste Anwendung"), das nur einen groben Ueberblick
zu Core Wars bot, werden ab jetzt alle Funktionen und Möglichkeiten des
Systems erschöpfend beschrieben.
2.3.1 Der Editor
----------------
Der Redcode Editor wird vom Core Wars Programm aus durch den Menupunkt
"Editor" im Streifen "Action" aufgerufen. Er ist dazu vorgesehen, den
Programmtext eines Redcodeprogrammes einfach und schnell zu erstellen.
Dennoch bietet dieser Editor eine Fülle von nützlichen Funktionen,
angefangen vom Einlesen und Abspeichern von Text bis zur Belegung von
Funktionstasten mit beliebigen Floskeln. Alle diese Funktionen können
sowohl mit der Maus durch die Menustreifen als auch durch spezielle
Tastenkombinationen aufgerufen werden. Die folgenden Absätze führen Sie
zunächst durch die einfachsten Grundlagen das Editors, um dann nach und
nach auch die komplizierteren Möglichkeiten zu beleuchten.
2.3.2 Bildschirmaufbau des Editors
----------------------------------
Das Hauptgeschehen im Editor spielt sich im grossen, fast den ganzen
Bildschirm umfassenden Textfenster ab. Dort wird der eingelesene Text
angezeigt und dort können Sie Ihre Programme eingeben. Von diesem
Textfenster wird durch eine dünne Linie eine einzelne Zeile abgetrennt,
die Statuszeile. In dieser Zeile werden verschiedene Meldungen des
Editors angezeigt. Wenn Sie eine Funktion falsch anwenden, erscheint
dort eine entsprechende Fehlermeldung. Die Statuszeile dient ebenfalls
zur Eingabe von einfachen Zahlenwerten, die der Editor benötigt: Ein
Beispiel ist die Grösse des Tabulatorsprunges, die Sie ändern können.
Normalerweise wird in der Statuszeile jedoch immer der Name der gerade
bearbeiteten Quelldatei angezeigt.
2.3.3 Bewegen im Text
---------------------
Die einfachsten Möglichkeiten, sich mit dem Editor durch einen Text zu
bewegen, haben Sie schon kennengelernt: Die Cursortasten dienen dazu,
jeweils um ein Zeichen oder eine Zeile nach links, rechts, oben oder
unten zu hüpfen. Der Redcode Editor bietet jedoch noch mehr
Steuerfunktionen, die alle bei der Behandlung der Menustreifen etwas
weiter unten erklärt werden.
2.3.4 Die Menustreifen
----------------------
Nach dem Aufrufen des Editors werden die Menustreifen des Core Wars
Hauptprogrammes durch diejenigen des Editors ersetzt. Die folgenden
Menustreifen werden aktiv und können mit der Maus angewählt werden:
SYSTEM Alle Operationen, die sich auf Diskette oder den
ganzen Programmtext beziehen.
EDITIEREN Die Mehrzahl der Kommandos, durch die sich der
Programmtext verändern lässt.
REDCODE Redcode-Spezifische Funktionen.
BEWEGEN Alle Kommandos, die es erlauben, sich im Text zu
bewegen und ihn auf dem Bildschirm anzuzeigen.
SUCHEN Funktionen, mit denen sich nach bestimmten Wörtern
oder Sätzen im Text suchen lässt.
SPEZIAL Einige weitere Funktionen, bei denen es
schwerfällt, sie in den vorangegangenen
Sammelbegriffen einzuordnen.
Es folgt nun eine genaue Beschreibung jedes Menupunktes dieser
Menustreifen. Die Ueberschrift der einzelnen Absätze entspricht dem
Namen des Streifens, gefolgt von einem Schrägstrich und dem Namen des
Menupunktes. Hinter dem Titel folgt die Tastenkombination, mit der die
Funktion ebenfalls aufrufbar ist. Die Tasten werden mit folgenden
Kürzeln bezeichnet:
o ESC Escape-Taste. Diese Taste braucht im Gegensatz zu
den anderen Steuertasten nicht gleichzeitig mit
der Buchstabentaste gedrückt zu werden. Als
Gedankenstütze erscheint in der Statuszeile die
Meldung "Befehlsmodus".
o AMIGA Die rechte Amiga-Taste, gleich rechts neben der
Leerschlag-Taste.
o SHIFT Die Shift- oder Zweitfunktionstaste. Die Amiga-
und die Shift-Tasten müssen gleichzeitig mit dem
entsprechenden Buchstaben oder Pfeil gedrückt
werden.
o TAB Die Tabulatortaste. Sie liegt im linken oberen
Teil der Tastatur gleich unterhalb der Escape-Taste.
o <u> Pfeil nach unten.
o <o> Pfeil nach oben.
o <l> Pfeil nach links.
o <r> Pfeil nach rechts.
o a...z Die Zeichentasten der Tastatur klein...
o A...Z oder gross (mit der Shift-Taste gleichzeitig).
Lesen Sie die Erklärungen der Reihe nach durch und führen Sie die
aufgeführten Menupunkte gleich aus. Wenn Sie später während der Arbeit
mit dem Editor bei der einen oder anderen Funktion nicht mehr wissen,
wie sie angewendet wird, können Sie die benötigten Informationen hier
sehr leicht finden.
System/Einlesen (AMIGA r)
-------------------------
Liest eine Quelldatei von Diskette, Festplatte oder RAM-Disk in den
Editorspeicher ein. Wenn sich schon ein Text im Editor befindet, so
wird dieser durch den eingelesenen Text überschrieben. Der Name der
Datei kann durch einen Textkasten, der auf dem Bildschirm erscheint,
eingegeben werden. Nach der Eingabe muss entweder die Return-Taste
gedrückt oder eines der beiden Antwortkästchen mit der Maus angeklickt
werden: OK = Einlesen oder ABBRUCH = Abbrechen des Vorgangs. Nach einem
Abbruch ist der alte Quell text unverändert im Editorspeicher vorhanden.
System/Abspeichern (AMIGA s)
----------------------------
Der Text im Editorspeicher wird unter dem aktuellen Namen in den
Massenspeicher (Diskette, Festplatte oder RAM-Disk) zurückgespeichert.
Eine alte Datei mit dem gleichen Namen wird dabei durch den neuen Text
überschrieben. Der aktuelle Name wird normalerweise in der Statuszeile
laufend angezeigt.
System/Abspeichern als (AMIGA v)
--------------------------------
Schreibt den Text, der sich im Editorspeicher befindet, unter einem
neuen Namen auf den Massenspeicher. Der Name kann durch den bekannten
Eingabekasten gewählt werden. Der Vorgang kann natürlich wieder durch
Anklicken von ABBRUCH abgebrochen oder durch Anklicken von OK bestätigt
werden. Wenn sich eine Datei mit dem gleichen Namen, den Sie eingegeben
haben, schon auf der Diskette befindet, wird diese durch den neuen Text
überschrieben.
System/Einstellungen l. (AMIGA l)
---------------------------------
Der Redcode Editor bietet die Möglichkeit, bestimmte Einstellungen des
Editors auf Diskette zu speichern und wieder einzulesen. Diese
Einstellungen sind:
a) Der Tabulatorsprung, also die Anzahl der Zeichen, die übersprungen
werden, wenn die Tabulatortaste gedrückt wird.
b) Die Unterscheidung von Gross/Kleinschrift beim Suchen von Wörtern.
c) Das Aufblitzen des Bildschirms, wenn über das 66-ste Zeichen
hinweggeschrieben wird.
d) Alle Makros, die Sie selbst eingegeben haben. Was Makros sind und
wie Sie diese verändern können, erfahren Sie bei der Funktion
"Spezial/Makros eingeben".
Alle diese Einstellungen können Sie nach Ihrem Geschmack verändern und
dann auf Diskette abspeichern. Wenn Sie den Editor ein anderes Mal
wieder starten, können Sie Ihre Einstellungen schnell wieder von der
Diskette einlesen, um sich in Ihren bevorzugten Modi zu befinden.
Bei dieser Funktion steht das kleine "l" für "lesen", es werden also
Einstellungen eingelesen. Sie können den Namen der Einstellungen wie
beim Einlesen einer normalen Textdatei durch den Eingabekasten wählen.
Wenn der Editor zum ersten Mal aufgerufen wird, versucht er, eine Datei
mit Standardeinstellungen einzulesen. Diese Datei muss im Verzeichnis
"System" mit dem Namen "Einstellungen" auf der Core Wars Diskette
vorhanden sein. Sie können also Ihre eigenen Einstellungen unter dem
Namen ":System/Einstellungen" abspeichern. Von diesem Zeitpunkt an
werden bei jedem Neustart des Core Wars Programmes Ihre bevorzugten
Einstellungen automatisch eingelesen.
System/Einstellungen s. (AMIGA e)
---------------------------------
Hier werden die Einstellungen auf Diskette gesichert (s = sichern). Der
Editor verlangt wiederum einen Namen, unter dem die Einstellungen
abgespeichert werden können.
Wir empfehlen, dass Sie den oder die Namen ihrer Einstellungen so
wählen, dass er nicht mit dem einer normalen Quelldatei eines
Redcode-Programmes verwechselt werden kann. Ein Beispiel wäre, für
Einstellungen immer die Endung ".MOD" für Modus am Namen anzuhängen.
System/Einfügen (AMIGA i)
-------------------------
Gleich wie bei der Funktion "System/Einlesen" wird hier eine Quelldatei
von Diskette in den Editorspeicher eingelesen. Ein schon im Editor
vorhandener Quelltext geht jedoch nicht verloren, sondern der neue Text
wird an der Position des Cursors in den alten eingefügt. Auf diese
Weise können Sie mehrere kleine Programme zu einem grösseren
zusammenfassen. Beispiel für ein grosses Programm, das eigentlich aus
mehreren kleinen aufgebaut wurde, ist der "Fallensteller", der in
Kapitel 3.2 näher erklärt wird.
System/Name ändern (AMIGA a)
----------------------------
Sie können hier den Namen einer bereits eingelesenen oder neu
geschriebenen Datei ändern. Der neue Name wird wie immer durch einen
Eingabekasten gewählt und erscheint darauf in der Statuszeile des
Editors.
System/Nochmals laden (AMIGA n)
-------------------------------
Wenn Sie nach vielen Aenderungen eines Quelltextes merken, dass die
ursprüngliche Version doch um einiges besser war, können Sie mit dieser
Funktion die alte Quelldatei nochmals von Diskette einlesen. Beachten
Sie jedoch, dass alle Veränderungen des Text es im Editorspeicher dabei
verloren gehen.
System/Abbrechen (AMIGA q)
--------------------------
Nichts geheimnisvolles: Der Editor wird beendet und Sie befinden sich
wieder im Hauptprogramm von Core Wars. Wenn der Editor später wieder
aufgerufen wird, ist der zuletzt editierte Programmtext noch vorhanden.
Editieren/Marke setzen (AMIGA m)
--------------------------------
Wie viele Textverarbeitungen bietet auch der Redcode Editor verschiedene
Funktionen an, mit deren Hilfe beliebige Textblöcke ausgeschnitten und
an anderer Stelle wieder in den Text eingefügt werden können. Diese
Funktionen benötigen die Position und die Grösse des Blockes, der
bearbeitet werden soll. Wir haben dieses Problem so gelöst, dass wir
den Block durch zwei Punkte begrenzen, die an beliebiger Position im
Text stehen können. Der eine dieser Punkte ist die augenblickliche
Cursorposition, der andere Punkt ist die Marke. Sehen wir uns den
folgenden Ausschnitt aus einem Redcode-Quelltext an, um die Bedeutung
des Cursors und der Marke zu verdeutlichen:
DAT 0 ; Zeiger auf Quelle
DAT 99 ; Ze
i
ger auf Ziel, 100 Zellen
start MOV @-2, @-1 ; Quelle zum Ziel kopieren
CMP -3, #9 ; Ist das ganze Programm kopiert?
JMP e
n
de ; Ja: Schleife beenden
ADD #1, -5 ; sonst die beiden Zeiger
ADD #1, -5 ; inkrementieren
JMP start ; Schleife wiederholen
ende MOV #99, 93 ; Programmkopie beenden
JMP 93 ; und dorthin springen.
Der Cursor ist auf dem "i" des Wortes "Zeiger" in der zweiten Zeile
positioniert, die Marke steht auf dem "n" des Wortes "ende" in der
fünften Zeile. Der Block, der durch diese zwei Punkte begrenzt ist,
sieht so aus:
iger auf Ziel, 100 Zellen
start MOV @-2, @-1 ; Quelle zum Ziel kopieren
CMP -3, #9 ; Ist das ganze Programm kopiert?
JMP e
Dabei ist es unwichtig, ob der Cursor oder die Marke den Beginn des
Blockes kennzeichnet. Auch wenn die Marke auf dem "i" und der Cursor
auf dem "n" gelegen hätte, wäre der Inhalt des Blockes derselbe
geblieben.
Alle Blockfunktionen beziehen sich auf den ganzen Block inklusive des
Zeichens, auf dem die obere der beiden Markierungen steht. Der Redcode
Editor unterstützt diese Manipulationen mit Blöcken:
Editieren/Schneiden (AMIGA x)
-----------------------------
Legt den durch Marke/Cursor bezeichneten Textblock im Puffer ab und
löscht anschliessend diesen Block aus dem Text. Der alte Inhalt des
Puffers geht verloren, weil er durch den neuen Block ersetzt wird.
Editieren/Löschen (AMIGA d)
---------------------------
Löscht den durch Marke/Cursor bezeichneten Textblock aus dem
Editorspeicher. Der Puffer wird nicht verändert.
Editieren/Kopieren (AMIGA c)
----------------------------
Kopiert den durch Marke/Cursor bezeichneten Textblock in den Puffer.
Der aktuelle Text wird nicht beeinflusst, der alte Inhalt der Puffers
wird jedoch überschrieben.
Editieren/Einfügen (AMIGA p)
----------------------------
Der gesamte Puffer wird an der durch den Cursor bestimmten Position im
Text eingefügt. Alle folgenden Textzeilen werden um entsprechend viele
Zeilen nach unten verschoben.
Wenn ein neuer Text eingelesen wird, wird der Editorspeicher
überschrieben. Die Daten, die im Puffer stehen, werden jedoch erhalten
und können weiterverwendet werden. Sie können so zum Beispiel ein
Programm schreiben und durch "kopieren" von Zeit zu Zeit im Puffer
ablegen. Wenn Sie nach einigen Veränderungen dann merken, dass die
zuletzt im Puffer abgelegte Version des Programmes doch etwas besser
war, können Sie den aktuellen Text löschen (nicht schneiden!) und mit
"einfügen" den Quelltext im Puffer wie der hervorholen.
Inzwischen sollte die Bedeutung von "Marke setzen" etwas
offensichtlicher sein: An der Cursorposition wird die Marke gesetzt.
Die Marke ist jedoch auf dem Bildschirm im Gegensatz zum Cursor nicht
sichtbar. Sie sollten sich deshalb immer im Klaren darüber sein, an
welcher Position sie das letzte Mal die Marke gesetzt haben. Nach einem
Neustart von Core Wars und dem Editor zeigt die Marke automatisch auf
das erste Zeichen der ersten Zeile. Es ist wichtig, dies zu wissen,
weil Sie sonst unbeabsichtigt grössere Teile des Quelltextes löschen
könnten.
Editieren/Text neu (ESC c)
--------------------------
Löscht den gesamten Text aus dem Editorspeicher. Der Puffer wird nicht
beeinflusst und der Name der Quelldatei sowie alle Einstellungen bleiben
ebenfalls erhalten. Um die unbeabsichtigte Löschung eines Textes zu
verhindern, haben wir eine Sicherheitsabfrage eingebaut. In der Mitte
des Editorfensters erscheint ein weisser Textkasten mit der Frage, ob
wirklich gelöscht werden soll. Sie können hier den Vorgang abbrechen,
indem Sie mit der Maus in das ABBRUCH-Kästchen klicken.
Editieren/Alles löschen (ESC r)
-------------------------------
Wie bei "Text neu" wird auch hier der gesamte Text gelöscht. Darüber
hinaus werden alle Einstellungen auf die Standardwerte gesetzt und der
Puffer wird ebenfalls gelöscht. Auch hier findet zuvor eine
Sicherheitsabfrage nach dem gleichen Prinzip wie bei " Text neu" statt.
Editieren/Löschen Ende (ESC e)
------------------------------
Von der aktuellen Cursorposition bis zum Ende des Textes wird alles
gelöscht, wobei der Puffer nicht verändert wird. Diese Funktion ist
jedoch mit Vorsicht zu geniessen, weil keine Sicherheitsabfrage
vorgenommen wird.
Editieren/Löschen Anfang (ESC a)
--------------------------------
Der Text wird vom Beginn bis zur aktuellen Cursorposition gelöscht.
Alles weitere ist gleich wie bei "Löschen Ende".
Editieren/Zeile löschen (ESC k)
-------------------------------
Die Zeile, in der sich der Cursor befindet, wird ganz gelöscht. Alle
nachfolgenden Zeilen des Textes rücken um eine Stelle nach oben.
Editieren/Lösch. ab Cursor (ESC l)
----------------------------------
Von der aktuellen Cursorposition bis zum Ende der Zeile werden alle
Zeichen gelöscht. Die folgenden Zeilen werden nicht verschoben, der
Platz der gelöschten Zeichen bleibt erhalten.
Editieren/nächstes Wort l. (AMIGA o)
------------------------------------
Das nächste Wort, das in seiner ganzen Länge rechts vom Cursor liegt,
wird aus dem Text gelöscht.
Editieren/voriges Wort l. (AMIGA k)
-----------------------------------
Das nächste Wort, das noch ganz links des Cursors liegt, wird aus dem
Text gelöscht.
Editieren/Wort gross (AMIGA g)
------------------------------
Das Wort, in dem der Cursor positioniert ist, wird ganz in
Grossbuchstaben geschrieben. Buchstaben, die schon vorher gross
geschrieben waren, bleiben unverändert. Diese Funktion ist nützlich,
wenn ein Redcode-Befehl aus Versehen klein geschrieben wurde und nun in
Grossschrift dastehen sollte. Wenn der Cursor beim Aufrufen der
Funktion nicht innerhalb eines Wortes stand, wird der Text nicht
verändert.
Redcode/DAT, MOV, ADD, SUB, JMP, JMZ, JMN, DJN, CMP, SPL (F1 ...)
-----------------------------------------------------------------
Dies sind eigentlich ziemlich triviale, aber dennoch sehr nützliche
Funktionen. Sie tun nichts anderes, als die Zeichen des entsprechenden
Befehles an der aktuellen Cursorposition in den Programmtext einzufügen.
Am Ende des eingesetzten Befehls wird noch ein Zwischenraum angehängt
und der Cursor wird auf das folgende Zeichen gesetzt. Alle diese
Menupunkte können auch durch die Funktionstasten F1 bis F10 (die oberste
Reihe der Tastatur) aufgerufen werden. Dabei steht F1 für den Befehl
"DAT", F2 für "MOV" und so weiter bis zu F10 für "SPL". Mit dem
Menupunkt "Makro Eingeben" kann die Belegung der Funktionstasten mit
Wörtern beliebig verändert werden.
Redcode/Formatieren
-------------------
Nach dem Aufruf wird der gesamte Quelltext im Editorspeicher nach einem
bestimmten Schema formatiert. Es werden alle Redcode-Befehle in
Grosschrift umgewandelt und bündig untereinander geschrieben. Alle
Leerzeichen zwischen den Argumenten der Redcode-Befehle werden auf ein
Komma mit einem folgenden Leerzeichen reduziert. Die Kommentare werden
gleich wie die Befehle untereinander ausgerichtet und in die richtige
Spalte geschrieben. Hier ist das Schema, nach dem die Zeilen formatiert
werden:
"Label Opcode Argument A, Argument B ; Kommentar" = Eine Zeile Quelltext.
Label: 16 Zeichen
Opcode: 4 Zeichen
Argumente A + B: 19 Zeichen zusammen. Die Argumente müssen durch ein
Komma getrennt sein. An das Komma wird immer genau
ein Leerzeichen angehängt. Das Komma kann weggelassen
werden, wenn nur ein Argument angegeben wird.
Kommentar: 38 Zeichen. Alle überschüssigen Zeichen werden
abgeschnitten und gehen verloren.
Durch diese Formatier-Funktion wird das Schreiben eines
Redcode-Programmes sehr vereinfacht. Es müssen keine festen Abstände
eingehalten werden, die Befehle können klein geschrieben werden und die
Kommentare können gleich anschliessend an die Argumente getippt werden.
Eine der wenigen Bedingungen für eine richtige Formatierung ist, dass
Sie einen Redcode-Befehl nicht in der vordersten Spalte einer Zeile
beginnen dürfen. Wörter, die am linken Rand einer Zeile anfangen,
werden als Labels angesehen. Lassen Sie deshalb mindestens ein
Leerzeichen stehen, bevor Sie das Befehlswort schreiben. Gleiches gilt
für die Trennung zwischen Befehlen und Argumenten, auch hier ist
mindestens ein Leerzeichen nötig.
Redcode/Syntax prüfen
---------------------
Dies ist eine der speziell auf das Schreiben von Redcode Programmen
zugeschnittenen Funktionen dieses Editors. Die Funktion überprüft
beginnend mit der ersten Zeile des Programmtextes im Editorspeicher den
Aufbau des Redcode-Programmes auf Syntaxfehler. Folgendes wird
kontrolliert:
o Die Befehle müssen mit Grossbuchstaben geschrieben sein.
o Jede Zeile ausser den reinen Kommentarzeilen muss genau einen
gültigen Befehl enthalten.
o Nach den Argumenten dürfen ausser den Kommentaren keine
Zeichen mehr folgen.
o Jedes Label darf nur einmal definiert werden (oder mit
anderen Worten am linken Rand der Zeile stehen).
o Die Anzahl der Argumente für jeden Befehl muss stimmen.
o Die Adressierung der Argumente muss erlaubt sein (siehe
Befehlsliste in Abschnitt 4 des ersten Kapitels).
Sobald ein Fehler auftritt, wird der Cursor auf die entsprechende Stelle
im Text gesetzt und in der Statuszeile wird die Art des Fehlers
angezeigt. Sie können nun den Fehler korrigieren und danach erneut die
Funktion "Syntax prüfen" aufrufen. Wenn Sie auf diese Weise einen
Quelltext durchgearbeitet haben, sollte eigentlich keiner der üblichen
Syntaxfehler mehr im Programm sein. Natürlich ist es möglich, dass sich
noch logische Fehler in Ihrem Quelltext verbergen. Diese können Sie
dann erst nach dem Assemblieren durch einen Probelauf mit den "Trace"-
und "Status"- Optionen entdecken (siehe Abschnitte 2.6 bis 2.8).
Vor dem Aufruf von "Syntax prüfen" sollte das Programm üblicherweise mit
"Formatieren" etwas auf Vordermann gebracht werden. Die
offensichtlichsten Fehler findet man nämlich meistens schon dann, wenn
ein Quelltext einigermassen geordnet aussieht. Weitere Informationen
zum Thema Fehlersuche können Sie den Abschnitten 2.9 und 2.10 entnehmen.
Bewegen/Textanfang (ESC <o>)
----------------------------
Alle Funktionen im Menustreifen "Bewegen" dienen dazu, den Cursor im
Text zu positionieren. Besondere Beachtung verdienen hier "vorige
Seite" und "nächste Seite". Diese Kommandos können nämlich auch durch
einen Mausklick in den Titelbalken bzw. in die Statuszeile des Editors
augerufen werden. Doch gehen wir die Menupunkte der Reihe nach durch:
"Textanfang" bewegt den Cursor auf das erste Zeichen des Textes. Das
Editorfenster wird neu aufgebaut, wenn sich der Beginn des Textes nicht
in der Anzeige befindet.
Bewegen/Textende (ESC <u>)
--------------------------
Der Cursor wird auf das letzte Zeichen des Textes gesetzt. Wiederum ist
es möglich, dass der Bildschirm neu aufgebaut wird.
Bewegen/Zeile... (ESC g)
------------------------
Diese Funktion bewegt den Cursor auf den Beginn einer Zeile, die Sie
durch ihre Nummer bestimmen können. In der Statuszeile erscheint eine
Aufforderung, die Nummer der Zeile einzugeben. Wenn Sie eine Zahl
verwenden, die auf eine Position ausserhalb des Textes weist, wird in
der Statuszeile eine Fehlermeldung angezeigt und Sie befinden sich
wieder im normalen Editorfenster. Die Zahl kann mit den normalen
Zahlentasten eingegeben und gegebenenfalls mit der "Backspace"-Taste
korrigiert werden. Die Eingabe der Zahl wird durch einen Druck auf die
RETURN-Taste abgeschlossen.
Bewegen/Marke tauschen (ESC t)
------------------------------
Die aktuelle Cursorposition wird mit der Position der Marke (siehe
Blockfunktionen, Menu "Editieren") vertauscht. Eventuell wird dabei der
Bildschirm neu aufgebaut, wenn die Marke ausserhalb des Editorfensters
lag. Die Marke zeigt anschliessend an die Stelle, an der sich zuvor der
Cursor befand. Denken Sie daran, dass die Marke nach einem Neustart des
Systems immer auf das erste Zeichen der ersten Zeile zeigt.
Bewegen/nächste Seite (ESC n)
-----------------------------
Im Editorfenster wird die nächste Seite des Textes angezeigt und der
Cursor auf das erste Zeichen der untersten Bildschirmzeile gesetzt.
Wenn Sie am Ende des Editorspeichers angekommen sind, erscheint die
letzte Textlinie auf der letzten Zeile des Bildschirms. Diese Funktion
kann auch dadurch aufgerufen werden, indem Sie mit der Maus in die
Statuszeile des Editors klicken.
Bewegen/vorige Seite (ESC v)
----------------------------
Die vorhergehende Seite im Text wird im Editorfenster angezeigt. Der
Cursor erscheint auf dem ersten Zeichen der obersten Bildschirmzeile.
Analog zur Funktion "nächste Seite" wird beim Erreichen des Textbeginns
die erste Linie des Textes in der obersten Bildschirmzeile angezeigt.
Auch hier kann die Funktion durch Klicken mit der Maus in den
Titelbalken des Editorfensters aufgerufen werden.
Bewegen/nächstes Wort (SHIFT <r>)
---------------------------------
Der Cursor wird auf das erste Zeichen des nächsten, ganz rechts von der
aktuellen Cursorposition stehenden Wortes bewegt. Wenn auf der selben
Zeile kein weiteres Wort mehr zu finden ist, springt der Cursor auf den
Beginn der nächsten Linie.
Bewegen/voriges Wort (SHIFT <l>)
--------------------------------
Hier wird der Cursor auf das letzte Zeichen des nächsten, ganz links von
der aktuellen Cursorposition stehenden Wortes bewegt. Der Cursor
springt auf das Ende der vorhergehenden Linie, wenn auf der selben Zeile
kein weiteres Wort mehr zu finden ist.
Bewegen/nächste Zeile (<u>) und Bewegen/vorige Zeile (<o>)
----------------------------------------------------------
Diese beiden Funktionen bewegen den Cursor auf die vorhergehende (weiter
oben stehende) bzw. auf die nachfolgende (weiter unten stehende) Zeile.
Die Spalte, in der sich der Cursor befindet, wird dabei nicht verändert.
Bewegen/Zeilenende (ESC <r>) und Bewegen/Zeilenanfang (ESC <l>)
---------------------------------------------------------------
Der Cursor wird entweder auf das erste oder das letzte Zeichen der
aktuellen Zeile gesetzt.
Bewegen/Tabulator (TAB)
-----------------------
Der Cursor wird normalerweise um 16 Zeichen nach rechts verschoben.
Wenn der Cursor über das Ende der Zeile hinauskommt, werden die
restlichen Zeichen mit Zwischenräumen aufgefüllt. Die Tabulatortaste
findet beim Schreiben eines Redcode - Programmes verwendung, wenn ein
Befehlswort geschrieben werden soll. Anstatt 16 Mal die Zwischenraum -
Taste zu drücken, kann einfach einmal der Tabulator batätigt werden.
Die Anzahl der Zeichen des Tabulatorsprunges können Sie mit der Funktion
"Spezial/Tabulator" in weiten Grenzen selbst bestimmen.
Bewegen/Cursor Home (ESC h) und Bewegen/Cursor uHome (ESC z)
------------------------------------------------------------
Setzt den Cursor in die linke obere bzw. die linke untere Ecke des
Editorfensters.
Suchen/Vorw. suchen (ESC s)
---------------------------
In diesem Menustreifen finden sich verschiedene Funktionen zum
Durchsuchen von Text. Sie können mit deren Hilfe bestimmte Wörter
finden und wahlweise durch andere Begriffe ersetzen.
"Vorw. suchen" steht für "vorwärts suchen". Nachdem Sie den Menupunkt
angewählt haben, können Sie einen Suchbegriff mit bis zu 77 Zeichen (die
Länge einer Zeile im Editor) eingeben. Der Text wird dann beginnend bei
der aktuellen Cursorposition nach diesem Wort durchsucht. Wenn eine
Stelle gefunden wird, die der Eingabe entspricht, wird der Cursor auf
das Ende des gefundenen Wortes gesetzt. Wenn erfolglos gesucht wurde,
erscheint in der Statuszeile eine entsprechende Meldung und die Position
des Cursors bleibt unverändert. In beiden Fällen befinden Sie sich
anschliessend wieder im normalen Eingabemodus des Editors.
Suchen/Rückw. suchen (ESC b)
----------------------------
Hier können Sie den Text in der umgekehrten Richtung nach einem Begriff
durchsuchen. Die Eingabe erfolgt wie beim normalen Suchen, aber der
Cursor wird nach dem Auffinden eines Wortes an dessen Ende gesetzt.
Suchen/Suchen, Ersetzen (ESC p)
-------------------------------
Mit dieser Funktion können Sie den Text nach einem Wort durchsuchen und
alle so gefundenen Wörter automatisch durch einen zweiten Begriff
ersetzen lassen. Der Ersatzbegriff darf wiederum bis zu 77 Zeichen lang
sein und wird gleich wie der Suchbegriff ein gegeben. Wenn die Suche
abgeschlossen ist, erscheint eine Meldung in der Statuszeile und der
Cursor bleibt auf dem zuletzt ersetzten Wort positioniert.
Suchen/S. E. Fragen (ESC f)
---------------------------
Eigentlich ist dies dieselbe Funktion wie "Suchen, Ersetzen". Der
einzige Unterschied ist, dass hier vor jedem Ersetzen eine Rückfrage in
der Statuszeile gestellt wird. Wenn Sie das neu gefundene Wort wirklich
ersetzen wollen, drücken Sie die Taste "J" für Ja, ansonsten die Taste
"N" für Nein. In beiden Fällen wird die Suche nach dem nächsten Wort
fortgesetzt, bis nichts mehr gefunden wird.
Suchen/gross/klein (ESC u)
--------------------------
Bei allen Suchfunktionen können Sie mit diesem Menupunkt wählen, ob
Gross- und Kleinbuchstaben unterschieden werden sollen oder nicht. Wenn
der Haken vor dem Menupunkt gesetzt ist, werden Grossbuchstaben nicht
gleich bewertet wie Kleinbuchstaben. Ein Beispiel: "Null" ist nicht
gleich "null", weil der erste Buchstabe einmal gross und einmal klein
vorkommt. Wenn der Haken jedoch gelöscht wäre, würden die beiden Wörter
gleich behandelt werden. Den Haken können Sie setzen bzw. löschen,
indem Sie einfach den Menupunkt "gross/klein" einmal anwählen.
Spezial/Tabulator (AMIGA t)
---------------------------
Durch die Tabulatortaste kann um eine bestimmte Anzahl Zeichen im Text
vorwärts gesprungen werden. Diese Weite des Tabulators nennen wir den
Tabulatorsprung, welcher im Redcode Editor frei wählbar ist. Was
geschieht nun, wenn die Tabulatortaste gedrückt wird? Sollte sich der
Cursor mitten in einer schon geschriebenen Zeile befinden, verschiebt er
sich einfach um den Tabulatorsprung nach rechts. Wenn sich die
Schreibposition aber schon am Ende einer Zeile befindet oder das
Zeilenende während des Sprunges erreicht, werden soviele Zwischenräume
angefügt, bis die Distanz des Sprunges erfüllt ist. Der Cursor würde
sich in diesem Falle hinter dem letzten angehängten Leerzeichen
befinden. Dieser Effekt ist beim Schreiben eines Redcode-Programmes
sehr nützlich, weil ja meistens nicht vor jeden Befehl eine Sprungmarke
zu stehen kommt. Anstatt am Beginn jeder Zeile unzählige Male auf die
Leerschlagtaste zu hämmern, können Sie nun einfach den gewünschten
Tabulatorsprung einstellen (Standard ist 16 Zeichen) und fort an nur
noch die Tabulatortaste drücken.
"Spezial/Tabulator" erlaubt es Ihnen, die Grösse Ihres eigenen
Tabulatorsprunges frei auszuwählen. In der Statuszeile erscheint eine
Aufforderung zur Eingabe einer Zahl. Sie stellt die Anzahl der
Zwischenräume dar, die beim Betätigen der Tabulatortaste übersprungen
werden. Die Zahl sollte grösser als Null und kleiner als 32 sein, damit
Sie den Tabulator noch vernünftig verwenden zu können. Das Eintippen
erfolgt wie bei der Funktion "Bewegen/Zeile..." mit den normalen
Zifferntasten, das Korrigieren von Fehleingaben ist wiederum durch die
"Backspace-Taste" möglich.
Spezial/Makro eingeben (AMIGA u)
--------------------------------
Dies ist eine weitere leistungsfähige Einrichtung des Redcode Editors.
Die Funktionstasten F1 bis F10 und Shift-F1 bis Shift-F10 (zwanzig
Tasten) sind frei mit Zeichenketten Ihrer Wahl belegbar. Diese
Zeichenketten werden Makros genannt, ein Wort, das aus der griechischen
Vorsilbe "makr" für "gross" oder "mächtig" gebildet wurde. Eine
Anwendung von einem Makro wäre zum Beispiel die Belegung der
Funktionstaste Shift-F1 mit einem Label, das Sie oft benützen. Ein
Makro darf bis zu 77 Stellen lang sein und beliebige Zeichen enthalten.
Wenn Sie die Funktion "Makro eingeben" starten, wird in der Statuszeile
eine Meldung ausgegeben, die das Betätigen einer der Funktionstasten
verlangt. Dies ist die Taste, über die danach das Makro in den Text
eingefügt wird. Danach kann genau wie bei der Wahl eines Dateinamens
beim Abspeichern die Zeichenkette des Makros eingetippt werden. Beenden
Sie Ihre Eingabe schliesslich durch RETURN oder durch einen Klick in das
OK-Kästchen ab.
Positionieren Sie den Cursor irgendwo im Text und drücken Sie die mit
dem Makro belegte Funktionstaste. Die vorhin eingegebene Zeichenkette
wird in den Text eingefügt und der Cursor erscheint wieder am Schluss
des neuen Textes.
Gewissermassen "von Haus aus" sind die Funktionstasten F1 bis F10 mit
den zehn Redcode-Befehlen belegt, aber Sie können natürlich auch diese
Makros wie oben beschrieben verändern. Beachten Sie jedoch, dass dann
beim Anwählen einer der Befehlsfunktionen im "Redcode"-Menustreifen
nicht der aufgeführte Befehl, sondern Ihr nachträglich unter der
entsprechenden Funktionstaste abgelegtes Makro im Text eingefügt wird.
Spezial/Standard
----------------
Alle Einstellungen, die Sie verändert haben, werden durch die
Standardwerte ersetzt. Eine Liste dieser Einstellungen finden Sie in
der Beschreibung zur Funktion "System/Einstellungen l." am Beginn dieses
Kapitels und im Anhang A.5.
Spezial/Glocke
--------------
Wenn Sie das Core Wars Programm frisch gestartet haben, ist die Glocke
eingeschaltet. Sie merken dies, wenn Sie beim Schreiben einer Textzeile
mit dem Cursor über das 66. Zeichen hinauskommen: Bei jedem Tastendruck
blitzt der Bildschirm einmal kurz auf. Diese Einrichtung dient dazu,
Sie darauf aufmerksam zu machen, dass Sie fast das Ende einer Zeile
erreicht haben. Diese optische Glocke ist eingeschaltet, wenn der Haken
neben dem Menupunkt "Glocke" gesetzt ist. Natürlich können Sie den
Bildschirmblitz auch ausschalten, indem Sie einfach einmal "Glocke"
anwählen. Der Haken wird dann gelöscht und der Bildschirm beruhigt sich
wieder.
Spezial/Status zeigen (ESC X)
-----------------------------
In der Statuszeile wird eine Meldung über den augenblicklichen Zustand
des Textes angezeigt: Die Zeile und die Spalte, in der sich der Cursor
befindet, Die Anzahl Bytes, die der Text umfasst (ein Byte ist ein
Zeichen), und die Anzahl Zeilen, über die sic h der Text erstreckt.
Diese Statusmeldung wird auch angezeigt, wenn Sie den Cursor mit der
Maus in das Editorfenster setzen. Beachten Sie, dass die
Tastenkombination nicht das normale kleine, sondern das grosse X
verlangt. Drücken Sie also nach der Esc-Ta ste gleichzeitig die Shift-
und die x-Taste, um diese Funktion aufzurufen.
Spezial/Zeit zeigen (ESC T)
---------------------------
Hier wird in der Statuszeile die aktuelle Zeit und das Datum angezeigt.
Auch diese Funktion verlangt wie "Status zeigen" beim Aufrufen über die
Tastatur das grosse T anstelle eines kleinen.
2.4 Assemblieren
________________
Um einen Kampf zwischen zwei Redcode Programmen ausführen zu können,
müssen Sie die Quelltexte der Programme zuerst in einen von MARS
verständlichen Code übersetzen. Diese Umwandlung besorgt der Assembler.
2.4.1 Bedienung
---------------
Rufen Sie aus dem Menustreifen "Action" den "Assembler" auf. Sie können
nun in einen Textrequester den Namen des zu übersetzenden Programmtextes
eingeben. Nehmen wir an, Sie möchten das Programm "mice" assemblieren.
Es befindet sich im Verzeichnis "Beispiele" der Startdiskette. Deshalb
lautet der Pfadname "Beispiele/Mice". Drücken Sie die Return-Taste oder
klicken Sie mit der Maus in das OK-Gadget, um den Assembler laufen zu
lassen.
Auf dem Bildschirm erscheinen verschiedene Nachrichten, aus denen Sie
ersehen können, wann ein eventueller Fehler auftritt:
Kommentare löschen: Die Kommentare (wenn vorhanden) werden aus dem
Quelltext gelöscht. Redcode-Befehle codieren: Alle verwendeten
Anweisungen werden gesucht und in Ihre entsprechenden Codes verwandelt.
Symboltabelle erstellen: Die Symbole werden erfasst und durch die Werte,
die sie darstellen, ersetzt. Zwischenräume löschen: Alle überflüssigen
Leerschläge zwischen Befehlen und Argumenten werden gelöscht. Argumente
auflösen und berechnen: Alle Argumente werden durch eine Zahl mit dem
vorangestellten Adressierungsmodus ersetzt. Startzeile bestimmen: Wenn
das Symbol "start" verwendet wurde, beginnt die Ausführung bei dieser
Zeile, sonst bei der ersten gültigen Programmzeile.
Wenn die Assemblierung wegen einem Fehler im Quellcode abgebrochen
wurde, erscheint eine Fehlermeldung in einem Textkasten in der Mitte des
Bildschirmes. Alle möglichen Meldungen sind im Abschnitt 2.9 dieses
Kapitels beschrieben.
Nach einer erfolgreichen Assemblierung muss das ausführbare
Redcode-Programm noch auf Diskette zurückgespeichert werden. Zu diesem
Zweck erscheint ein neuer Textrequester, in dem der Programmname mit der
zusätzlichen Endung ".prg" angezeigt wird. Wenn Sie mit diesem Namen
einverstanden Sind, können Sie wieder die Return-Taste drücken oder mit
der Maus in das OK-Gadget klicken. Sie können den vorgeschlagenen Namen
natürlich noch ändern, denken Sie aber daran, dass Sie Ihren
ausführbaren Programmen eine besondere Endung verpassen sollten. Das
Assemblieren kann hier übrigens zum letzten Mal noch abgebrochen werden,
wenn Sie das STOP-Gadget des Textrequesters anwählen.
2.4.2 Regeln zum Assembler
--------------------------
Hier folgt eine zusammenfassung aller Regeln zum Aufbau eines
Quelltextes, den der Assembler verstehen und übersetzen kann.
Symbole:
Ein Symbol ist ein Wort, das stellvertretend für einen Zahlenwert
verwendet wird. Ein Symbol wird definiert, indem es an den Beginn einer
Befehlszeile des Quelltextes gesetzt wird. Wenn Das Symbol in der
ersten Zeile definiert wird, besitzt es den Wert Null, in der zweiten
Zeile den Wert 1 und so weiter bis zum Ende des Programmes. Jedes
Symbol muss genau einmal definiert werden. Ein Symbol muss als erstes
Zeichen einen Buchstaben von a - z oder A - Z enthalten, danach dürfen
sowohl Zahlen als auch Buchstaben folgen. Ein Symbol darf nicht länger
als 40 Zeichen sein und es dürfen nicht mehr als 30 Symbole in einem
Quelltext definiert werden.
Argumente:
Alle Argumente eines Befehls müssen angegeben werden. Ein Argument darf
eine Zahl, ein Symbol, ein Ausdruck aus Symbolen oder das *-Zeichen
sein. Jedes Argument kann mit einem der vier Zeichen #, $, @, <
adressiert werden (siehe auch Kapitel eins, Abschnitt 1.9). Ein
Ausdruck darf aus Zahlen, Symbolen sowie den Operatoren + und - für eine
Addition bzw. Subtraktion bestehen. Alle anderen Zeichen (Klammern,
Multiplikation, Division) sind nicht erlaubt. Zwischen Symbolen und
Zahlen müssen, zwischen Symbolen und Operatoren können Leerzeichen
enthalten sein.
Kommentare:
Um ein Redcode-Programm ausser dem Assembler auch einem Menschen
verständlich zu machen, können Kommentare verwendet werden. Ein
Kommentar kann am Ende einer Befehlszeile stehen oder er kann eine ganze
Zeile des Quelltextes belegen. Jeder Kommentar beginnt mit einem
;-Zeichen (Semikolon) und hört mit dem Zeilenende auf. Falls schon das
erste Zeichen einer Redcode-Zeile ein Semikolon ist, wird die ganze
Zeile als Kommentar interpretiert. Wenn dies nicht der Fall ist, nimmt
der Assembler an, dass eine normale Befehlszeile folgt. Wenn eine Zeile
nur Leerzeichen oder gar keine Zeichen enthält, wird sie übersprungen.
Programmgrösse:
Der Assembler kann bis zu 400 Zeilen eines Quelltextes einlesen und
übersetzen. Dies entspricht der Kapazität des Editors und sollte in den
meisten Fällen mehr als genug sein.
2.5 Der Kampf
_____________
Sie haben verschiedene Möglichkeiten, zwei Programme gegeineinander
kämpfen zu lassen. Die Schlacht findet natürlich immer im MARS
Speicherfeld mit seinen 8000 Zellen statt, aber Sie können beliebige
Kombinationen von drei verschiedenen Anzeigemodi auswählen. Diese drei
Modi dienen dazu, den Zustand des Speicherfeldes, die Anzahl Tasks der
Programme, die gerade bearbeiteten Anweisungen und vieles mehr
anzuzeigen.
Die Anzahl der Ausführungszyklen, bis ein Kampf für unentschieden
erklärt wird, kann ebenfalls geändert werden. Laut "Core War Standards"
sind es 10000 Schritte für jedes Programm. Weil sich dieser Wert
unserer Ansicht nach eher an der unteren Grenze befindet, kann er erhöht
oder vermindert werden und ist als Anfangswert bei Amiga - Core Wars auf
20000 Zyklen gesetzt.
2.5.1 Auswählen der Anzeigemodi
-------------------------------
Es gibt wie gesagt deren drei: Grafik, Status und Einzelschritt
(Zeitlupe). Wenn Sie sich im Menustreifen "Optionen" umschauen, sehen
Sie die Punkte "Grafik", "Status" und "Trace". "Trace" ist englisch und
steht für Zeitlupe: Eine Anzeige, mit deren Hilfe Sie die
Programmausführung verlangsamen und im Einzelschritt die beiden
Kampfprogramme verfolgen können. Jede dieser Optionen können Sie durch
einfaches Anwählen durch die Maus ein- oder ausschalten. Diese zwei
Zustände werden durch den jeweiligen Haken vor dem Menupunkt bestimmt:
Wenn der Haken erscheint, ist die Option eingeschaltet, wenn kein Haken
vorhanden ist, ist sie ausgeschaltet.
2.5.2 Zyklen
------------
Der vierte Punkt im Menustreifen "Optionen" ist "Zyklen". Dadurch
können Sie bestimmen, wieviele Instruktionen jedes Programmes ausgeführt
werden sollen, bis ein Unentschieden eintritt. Wenn Sie diesen
Menupunkt anwählen, fragt Core Wars nach der Anzahl Zyklen. Der Wert,
der angezeigt wird, stellt die gerade wirksame Anzahl der Zyklen dar.
Diese beträgt nach jedem Neustart von Core Wars 10000. Tippen Sie dann
eine beliebige Zahl zwischen eins und 99999 ein und klicken Sie nun mit
der Maus in das OK-Gadget.
2.5.3 Starten eines Kampfes
---------------------------
Das Starten eines Kampfes geht immer gleich vor sich: Sie rufen aus dem
Menustreifen "Action" den Punkt "Kampf" auf. Anschliessend erscheint
ein grosser Textrequester, in den Sie die Namen von zwei Kampfprogrammen
eingeben sollen. Klicken Sie dazu mit der Maus in einen der beiden
Balken und Tippen Sie den Pfadnamen eines assemblierten
Redcode-Programmes, z. B. "Beispiele/Mice.prg" (Endung .prg nicht
vergessen) ein. Klicken Sie in den anderen Balken und wiederholen Sie
die Eingabe mit einem anderen Namen, z.B. "Beispiele/Gnom.prg". Nun
können Sie die Eingaben mit einem Klicken in das OK-Gadget bestätigen
oder durch das ABBRUCH-Gadget den Kampf abbrechen.
Wenn Sie "OK" gewählt haben, geht"s los. Zuerst werden die beiden
Programme eingelesen, dann beginnt der Kampf. Je nachdem, welche
Anzeigemodi Sie eingeschaltet haben, erscheinen mehr oder weniger
Fenster, die die gewünschten Informationen zum Kampfgeschehen enthalten:
Die Grafikanzeige, die Statusanzeige und der Einzelschrittmodus.
Sobald eines der Programme gewonnen hat oder ein Unentschieden
eingetreten ist (die eingestellte Anzahl der Zyklen wurde
überschritten, ohne dass eine Entscheidung stattfand), wird der Ausgang
des Kampfes angezeigt. Sie können einen Kampf allerdings auch
vorzeitig abbrechen, indem Sie das Abbruch-Gadget mit der Maus
anklicken. Dieses Gadget erscheint immer im oberen Teil des
Bildschirmes über allen anderen Anzeigen, sobald ein Kampf gestartet
wurde.
Der Ausgang des Kampfes wird ebenfalls mit einem Gadget angezeigt. Sie
können irgendwo in diesen Textkasten hineinklicken, um schneller
zurück ins Hauptprogramm zu gelangen. Anschliessend fragt Core Wars
nach, ob gleich ein weiterer Kampf gestartet werden soll. Wenn Sie "ja"
anwählen, können Sie sofort die Namen von zwei neuen Kampfprogrammen
eingeben und weitermachen. Mit "nein" kommen Sie entgültig ins
Hauptprogramm zurück.
2.6 Die Statusanzeige
---------------------
Sie dient dazu, einen Ueberblick über die Anzahl der abgearbeiteten
Zyklen (Programmschritte) und der Tasks der Programme zu erhalten.
Ferner ist die Statusanzeige auch nützlich, wenn Sie gleichzeitig den
Einzelschrittmodus eingeschaltet haben: Sie sehen dann die aktuelle
Adresse und den aktuellen Task jedes Programmes. Abbildung 1 zeigt den
Status und den Einzelschrittmodus, wie sie auf dem Bildschirm
erscheinen. Ganz oben sehen Sie die Namen der beiden Programme
eingeblendet, dazwischen ist das Abbruch-Gadget. Im Fenster mit dem
Titel "Core Wars - Status" sind links und rechts zwei senkrechte Balken
gezeichnet, die grafisch wiedergeben, wieviele Tasks jedes Programmes zu
diesem Zeitpunkt laufen. Die genaue Zahl steht jeweils rechts und links
daneben: für "mice.prg" sind es hier 27, für "gnom.prg" läuft nur ein
Task. "Anzahl Zyklen" (oben Mitte) bedarf wohl keiner näheren Erklärung
mehr. "aktuelle Adresse" und "aktueller Task" gibt jeweils die Nummer
der gerade ausgeführten Speicherzelle im MARS-Speicherfeld und die
Nummer des dazugehörigen Tasks an. Wenn Sie die Programme nicht mit dem
Einzelschrittmodus angehalten haben, wechseln die einzelnen Zahlen im
Statusfenster sehr schnell.
2.7 Die Grafikanzeige
---------------------
Die grafische Darstellung des ganzen MARS-Speichers ist zweifellos
eines der interessantesten Features des Core Wars. Sie können dadurch
hautnah mitverfolgen, welche Verwüstungen die Kampfprogramme im
Speicher anrichten, und welche der beiden Parteien die bessere Taktik
anwendet. Es ist faszinierend, dabei zuzusehen, wie sich in einem Kampf
zwischen "mice" und "Mausefalle" die Mäusetasks hemmungslos vermehren,
um schliesslich doch nach und nach in die Fallen des Mäusefängers zu
tappen.
Die Grafikanzeige besteht am Anfang aus einem grossen schwarzen
Rechteck, das für das gesamte MARS-Speicherfeld steht. Es setzt sich
aus 100 Zeilen zu 80 Punkten = 8000 Zellen zusammen, die mit der Zeit je
nach Verlauf eines Kampfes verschieden gefärbt werden. Dabei stehen die
Farben für bestimmte Operationen, die mit der betroffenen
Speicherzelle angestellt wurden.
Jeder der beiden Konkurrenten in einem Kampf erhält eine der beiden
Farben Rot und Grün zugeordnet. Diese Farben werden bei der Anzeige der
Programmnamen ganz oben im Bildschirm gezeigt. Das linke (zuerst
eingegebene) Programm ist das Grüne, das rechte ist das Rote. Ein
dunkelgrüner oder dunkelroter Farbpunkt im Grafikfenster steht für eine
Speicherzelle, die vom betreffenden Programm verändert wurde. Ein
hellgrüner oder hellroter Farbpunkt steht dagegen für eine Zelle, die
schon von der jeweiligen Partei als Programmschritt ausgeführt wurde.
Man kann mit anderen Worten auch sagen, dass ein heller Farbton für eine
Zelle steht, die von einem Programmzeiger überstrichen wurde.
2.8 Die Zeitlupe (Trace)
Nur wenige Redcode-Programme laufen gleich auf Anhieb fehlerfrei. Hier
hilft die Einzelschritt-Option "Trace" weiter: Sie können den Ablauf
eines Kampfprogrammes Schritt für Schritt, also gewissermassen in
Zeitlupe, verfolgen. In der Abbildung 2 ist das Einzelschrittfenster
dargestellt. Sie können dort zwei Gadgets namens "Schritt" und "Start"
erkennen. Links und rechts daneben befinden sich zwei Kästen, in denen
ein Ausschnitt des jeweiligen Redcode-Programmes im Klartext aufgelistet
wird. Wir nennen diese Kästen die Listfenster, den sich darin
befindenden Text das disassemblierte (zurückübersetzte)
Redcode-Programm.
Nach dem Beginn eines Kampfes mit eingeschaltetem Einzelschrittmodus
passiert erst mal gar nichts. Vom linken (grünen) Kampfprogramm werden
sieben Zeilen entschlüsselt und im entsprechenden Fenster angezeigt.
Die mittlere, grün gedruckte Zeile ist die aktuelle Programmzeile, die
soeben ausgeführt wurde. Alle Veränderungen, die diese Zeile im
MARS-Speicher hervorgerufen hat, werden im Listing schon berücksichtigt.
Wenn Sie jetzt mit der Maus das Schritt-Gadget anklicken, wird die
hervorgehobene Zeile ausgeführt und anschliessend füllt sich auch das
rechte Listfenster mit dem disassemblierten Programmtext des roten
Programmes. Die rot angezeigte Zeile im Listing wurde soeben durch die
Betätigung des Schritt-Gadgets ausgeführt, und der ganze Vorgang beginnt
wieder von vorne. Sie können sich auf diese Weise mit einzelnen
Schritten durch die beiden Programme durcharbeiten. Wenn Sie mehrere
Schritte auf einmal zurücklegen wollen, können Sie das Start-Gadget
anwählen: Bis zur nächsten Betätigung von Start, Schritt (oder Abbruch)
wird der Kampf ohne Unterbrechung automatisch fortgeführt. Dabei werden
die aktuellen Programmschritte natürlich nicht mehr im Klartext
angezeigt, weil dies den Kampf unnötig verzögern würde.
Mit den Listfenstern können auch beliebige Teile des MARS-Speichers
disassembliert werden. Dazu dienen die vier Pfeile links und rechts
neben den Schritt/Start-Gadgets. Durch Anklicken der Pfeile kann im
Speicherfeld nach oben oder unten gewandert werden: Mit dem linken
Pfeilpaar von der Position des grünen Programmzeigers aus, mit dem
rechtem Paar vom roten Zeiger aus. Eine schnellere Möglichkeit, das
Listfenster zu positionieren, bietet sich durch die Grafikanzeige. Wenn
Sie im Schritt-Modus den Mauszeiger in dieser Grafik an eine beliebige
Stelle setzen und einmal die linke Maustaste drücken, ist die Position
registriert. Betätigen Sie nun einen der Pfeile, um den gewählten
Ausschnitt im Listfenster anzuzeigen. Welches der beiden Fenster
verwendet wird, hängt von folgenden Punkten ab:
o Wenn der Mauszeiger auf eine grüne (hell oder dunkel)
Speicherzelle gesetzt wurde, erscheint der disassemblierte
Speicherbereich im linken Listfenster.
o Bei einer roten Zelle wird das rechte Listfenster verwendet.
o Bei einer schwarzen Zelle wird wieder im linken (grünen)
Fenster angezeigt.
o Wenn zwei Punkte nacheinander angeklickt werden (rot, grün
oder schwarz), werden beide Fenster verwendet.
Die Pfeile und die Positionierung per Maus ist unwirksam, sobald der
Kampf mit dem Start-Gadget fortgeführt wird. Unabhängig vom
disassemblierten Speicherbereich befinden sich die beiden Programmzeiger
immer noch auf derselben Stelle, an der sie beim letzten Anhalten der
Ausführung waren.
2.9 Fehlermeldungen des Assemblers
__________________________________
Während des Assemblierens eines Redcode-Quelltextes können verschiedene
Assemblierfehler auftreten, die durch einen falsch aufgebauten Quelltext
hervorgerufen werden. Sobald ein solcher Fehler gefunden wird, wird das
Assemblieren abgebrochen und in einem Textrequester eine Fehlernummer,
eine Beschreibung des Fehlers im Klartext und wenn immer möglich die
Programmzeile, in der der Fehler gefunden wurde, angezeigt. Hier folgt
nun eine Liste aller Fehlernummern mit den entsprechenden Beschreibungen
und mit Hinweisen, wie die Fehler behoben werden können. Das Zeichen
"#" ersetzt die Zeilennummer, die normalerweise angezeigt würde.
Fehler Nr. 0
Meldung: Funktion konnte erfolgreich beendet werden.
Beschreibung: Vorgesehen für den normalen Verlauf einer Assemblierung,
wird jedoch nicht mehr verwendet.
Fehler Nr. 1
Meldung: Es werden zuviele Symbole definiert. Letztes Symbol in
Zeile #.
Beschreibung: Der Assembler erlaubt höchstens 30 verschiedene Symbole
in einem Redcode-Programm. Wenn die Anzahl überschritten
wird, erscheint diese Fehlermeldung mit der Zeile, in der
das 31. Symbol definiert wurde.
Abhilfe: Beissen Sie in den sauren Apfel und ersetzen Sie die
überzähligen Symbole durch die entsprechenden Zahlenwerte.
Fehler Nr. 2
Meldung: In Zeile # wird ein Symbol benutzt, das nicht definiert
wurde.
Beschreibung: Der Wert eines Symbols wird in einer Anweisung benötigt,
das Symbol wird jedoch im gesamten Programm nicht
definiert (Es besitzt keinen Wert).
Abhilfe: Meistens handelt es sich hier um einen simplen Tippfehler
in einem Symbol. Wenn dies nicht der Fall ist, haben Sie
es versäumt, das bewusste Symbol zu definieren. Beachten
Sie, dass bei einer Definition das Symbol ganz am linken
Rand einer Zeile beginnen muss.
Fehler Nr. 3
Meldung: Ein Argument des Befehls in Zeile # ist zu lange.
Beschreibung: Die Maximallänge eines Argumentes für einen Redcode-
Befehl ist auf vierzig Zeichen begrenzt. Diese Länge
versteht sich auch auf einen ganzen Ausdruck, der
mehrere Symbole enthalten kann.
Abhilfe: Versuchen Sie, sich auf kürzere Symbole zu beschränken,
vor allem dann, wenn komplizierte Ausdrücke als
Befehlsargumente verwendet werden.
Fehler Nr. 5
Meldung: In Zeile # wird ein nicht erlaubter Operator verwendet.
Beschreibung: Als Operatoren sind nur die beiden Zeichen für Addition
und Subtraktion, also "+" und "-", erlaubt.
Abhilfe: Beachten Sie, dass der Redcode Assembler die Zeichen für
Multiplikation und Division ("*" und "/") nicht kennt.
Versuchen Sie, den fraglichen Ausdruck nur mit "+" und
"-" zu formulieren.
Fehler Nr. 6
Meldung: In Zeile # wird ein Operator falsch verwendet.
Beschreibung: Fehler in der Schreibweise eines Ausdruckes.
Abhilfe: Die Zeichen "+" und "-" dürfen nur in Form von Vorzeichen
oder als Operator zwischen zwei Symbolen verwendet werden.
Fehler Nr. 7
Meldung: Ein Allgemeiner Fehler der Befehlssyntax tritt in Zeile #
auf.
Beschreibung: Dieser Fehler kann in vielen Fällen auftreten und ist in
einer allgemeinen Form nicht näher beschreibbar.
Abhilfe: Fehlerhafte Zeile auf Tippfehler überprüfen.
Fehler Nr. 8 und Nr. 9
Meldung: Der Befehl in Zeile Nr. # benötigt weniger Argumente als
vorhanden sind.
oder: Der Befehl in Zeile Nr. # benötigt mehr Argumente, als
vorhanden sind.
Beschreibung: Zu einem Befehl sind entweder zuviele oder zu wenige
Argumente vorhanden.
Abhilfe: Der Assembler erwartet als Trennzeichen zwischen zwei
Argumenten ein Komma. Wenn Sie ein älteres Redcode-
Programm abtippen, kann es sein, dass anstelle von Kommas
nur Zwischenräume als Trennzeichen verwendet wurden.
Weil unser Assembler Zwischenräume in den Argumenten
selbst erlaubt (z. B. zwischen den Operatoren), mussten
wir ein eindeutiges Trennzeichen wählen: das Komma.
Fehler Nr. 10
Meldung: In Zeile # ist bei den Argumenten ein Kommafehler
aufgetreten.
Beschreibung: In dieser Zeile wurde ein Komma falsch angewendet.
Abhilfe: Sie verwenden mehr als ein Komma als Trennzeichen,
es handelt sich meist um einen normalen Tippfehler.
Fehler Nr. 11
Meldung: Zeile # enthält keinen gültigen Redcode-Befehl.
Beschreibung: Jede Zeile eines Quelltextes, die keine reine
Kommentarzeile ist, muss eine gültige Redcodeanweisung
enthalten.
Abhilfe: Entweder wurde eine Kommentarzeile nicht durch ein
führendes Semikolon (;) gekennzeichnet oder der Befehl
in dieser Zeile wurde nicht grossgeschrieben.
Fehler Nr. 12
Meldung: In Zeile # wird eine Sprungadresse unmittelbar
angegeben.
Beschreibung: Der Befehl JMP (springen) darf nicht unmittelbar
adressiert werden.
Abhilfe: Weil ein Redcode-Programm nicht herausfinden darf, an
welche Stelle im Speicher es geladen wurde, ist es
verboten, eine Zieladresse des JMP-Befehls unmittelbar
anzugeben. Verwenden Sie eine der Adressierungen direkt,
indirekt oder indirekt inkrement.
Fehler Nr. 13
Meldung: In Zeile # wird die MOV-Zieladresse unmittelbar angegeben.
Beschreibung: Das zweite Argument von MOV darf nicht unmittelbar
adressiert werden.
Abhilfe: Siehe Nr. 12.
Fehler Nr. 14
Meldung: Zeile # enthält mehr als einen Redcode-Befehl.
Beschreibung: Eine Zeile des Quelltextes darf nur eine Anweisung
enthalten.
Abhilfe: Teilen Sie die fehlerhafte Linie in zwei Programmzeilen auf.
Fehler Nr. 15
Meldung: In Zeile # wird die SPL-Zieladresse unmittelbar
angegeben.
Beschreibung: Die Zieladresse von SPL (split) darf nicht unmittelbar
adressiert sein.
Abhilfe: Siehe Nr. 12.
Fehler Nr. 16
Meldung: In Zeile # wird ein Symbol zum zweiten Mal definiert.
Beschreibung: Ein Symbol darf nur einmal ganz am Beginn einer
Programmzeile stehen.
Abhilfe: Wenn ein unbekanntes Wort am Beginn einer Programmzeile
steht, nimmt der Assembler an, dass es als Sprungmarke
eingesetzt werden soll und weist ihm den Wert dieser Zeile
zu (das Symbol wird definiert). Ein Symbol kann jedoch nur
einen Wert enthalten, deshalb erscheint diese Fehlermeldung
bei einer weiteren definition einer Sprungmarke mit diesem
Namen. Ersetzen Sie eine der beiden Definitionen mit einem
anderen Namen.
Fehler Nr. 17
Meldung: Ich kann keine Datei mit dem angegebenen Namen finden.
Pfadname prüfen.
Beschreibung: Der Quellcode ist nicht unter diesem Namen auf der
Diskette vorhanden.
Abhilfe: Sehen Sie sich die entsprechende Diskette mit der Workbench
an, indem Sie jede Schublade (Directory, Verzeichnis) durch
einen Doppelklick mit der Maus öffnen. Für jeden Quellcode
und für jedes schon übersetzte Programm erscheint ein Icon.
Wenn Sie die bewusste Quelldatei gefunden haben, können Sie
diese durch doppeltes Anklicken ansehen.
Fehler Nr. 18
Meldung: Ein nicht näher beschreibbarer Diskettenfehler ist
eingetreten.
Beschreibung: Eine Datei (Programm, Text oder Einstellung) kann nicht
ordnungsgemäss von Diskette eingelesen oder abgespeichert
werden.
Abhilfe: Der Grund kann (unter anderem) eine defekte Diskette sein.
In diesem Falle sollten Sie den "DiskDoctor", ein
Hilfsprogramm des CLI, benützen. Ebenfalls eine mögliche
Ursache ist ein Bedienungsfehler, z. B. das Entfernen der
Diskette während dem Schreiben oder Lesen von Daten.
Fehler Nr. 19
Meldung: Die Diskette hat keinen freien Speicherplatz mehr.
Beschreibung: Eine Datei (Programm, Text oder Einstellung) konnte nicht
abgespeichert werden, weil die Diskette fast voll war.
Abhilfe: Um Platz zu schaffen, können Sie alte Dateien, die Sie
nicht mehr oft benützen, auf eine zweite Diskette
umkopieren. Löschen Sie anschliessend die kopierten
Dateien und wiederholen Sie den Versuch, die Daten
abzuspeichern.
Fehler Nr. 20
Meldung: Die Textzeile # im Quelltext ist zu lange.
Beschreibung: Der Assembler kann Zeilen bis zu einer Länge von 77
Zeichen bearbeiten. Wenn eine Zeile eines Redcode-
Programmes länger ist, erscheint diese Fehlermeldung
und der Assembliervorgang wird abgebrochen.
Abhilfe: Dieser Fehler tritt nicht auf, wenn Sie zum Schreiben
Ihrer Programme den Redcode-Editor verwenden. Wenn Sie
einen anderen Editor (z.B. den CLI-Editor ED) verwenden,
müssen Sie darauf achten, dass keine Programmzeile länger
als 77 Zeichen wird. Diese Zahl ist nicht willkürlich
gewählt, sondern sie ergibt sich aus der Anzahl Zeichen,
die auf einem umrandeten Bildschirm dargestellt werden
können. Wer seine Kampfprogramme mit einer
Textverarbeitung schreibt, sollte den fertigen
Programmtext im ASCII-Modus abspeichern (Die meisten
Textverarbeitungen bieten diese Funktion).
Fehler Nr. 21
Meldung: Der Quelltext besitzt mehr Zeilen, als ich bearbeiten kann.
Beschreibung: Der Assembler kann nur Redcode-Programme mit einer Länge
von bis zu 400 ausführbaren Zeilen übersetzen.
Abhilfe: Die gibt es nicht. Ein Redcode-Programm darf nicht mehr
als 400 Befehle enthalten. Unser Editor erlaubt
Textlängen von bis zu 400 Zeilen, davon darf jede eine
ausführbare Anweisung enthalten.
Fehler Nr. 22
Meldung: Der Speicher des Amiga ist voll.
Beschreibung: Der Assembler benötigt Speicherplatz, um ein Programm zu
übersetzen - in diesem Fall sogar mehr, als das System
zu bieten hat.
Abhilfe: Wenn Sie zusätzlich zu Core Wars noch andere Programme
laufen lassen, ist es möglich, dass der Speicher nicht
ausreicht. Stoppen Sie dann das andere Programm, um mehr
freie Bytes zu bekommen. Wenn nur Core Wars alleine läuft,
sollten Sie diese Fehlermeldung eigentlich nicht zu sehen
bekommen (Core Wars läuft auf allen Amigas mit mindestens
512 KB RAM und einem Floppy).
Fehler Nr. 23
Meldung: Die eingelesene Datei bietet keine verwertbaren
Redcode-Befehle.
Beschreibung: Ein Quelltext eines Redcode-Programmes muss mindestens
einen Befehl enthalten.
Abhilfe: Haben Sie die Befehle klein geschrieben? Der Assembler
erkennt nur Befehle in Grossbuchstaben. Wenn ein Befehl
jedoch ganz am Beginn einer Zeile steht hilft alles
nichts: er wird dann als Symbol betrachtet. In solchen
Fällen hilft die Funktion "Syntax Check" des Redcode-
Editors.
Fehler Nr. 24
Meldung: In Zeile # wird ein Symbol mit zuvielen Zeichen verwendet.
Beschreibung: Der Assembler kann sich nur Symbole mit bis zu 40 Zeichen
merken.
Abhilfe: Hier bleibt nur der Weg, den zu langen Symbolnamen durch
einen kürzeren zu ersetzen.
Fehler Nr. 25
Meldung: In Zeile # ist ein Argument zu kurz oder unvollständig.
Beschreibung: Der Ausdruck für ein Argument kann nicht ausgerechnet
werden, weil ein Fehler im Aufbau des Ausdrucks vorliegt.
Abhilfe: Meistens handelt es sich um Tippfehler. Die Operatoren
verlangen (sofern es keine Vorzeichen sind) immer zwei
Werte als Operanden, die links und rechts des Operator-
zeichens stehen müssen.
Fehler Nr. 26
Meldung: In Zeile # wird das Resultat des Ausdruckes unzulässig
gross.
Beschreibung: Vorgesehen für einen Ueberlauf (zu grosse Zahlen) während
der Berechnung eines Ausdruckes. Der Fehler wird aber
schon vom Assembler aufgefangen, indem er alle Zahlen,
die grösser als 8000 werden, mit dieser Formel verkürzt:
n = Rest von n / 8000. (in Basic etwa:
n = n - int(n / 8000) * 8000).
Lange Rede, kurzer Sinn: Sie werden Fehler. Nr. 26 nicht
antreffen.
Fehler Nr. 27
Meldung: Eine Adressierungsart in Zeile # passt nicht zum
verwendeten Befehl.
Beschreibung: Nicht für alle Redcode-Befehle sind alle Adressierungen
erlaubt.
Abhilfe: In der Befehlsbeschreibung in Kapitel eins, Abschnitt
1.4, sind alle erlaubten Adressierungsarten erklärt.
Eine Zusammenfassung dieser Seiten finden Sie in
Kapitel 3, Abschnitt 3.3.4 in Form einer Befehlstabelle.
Fehler Nr. 28
Meldung: Der Name der Programmdatei ist länger als 80 Zeichen.
Beschreibung: Der Assembler (auch der Redcode-Editor) kann keine
Dateinamen entgegennehmen, die länger als 80 Zeichen sind.
Abhilfe: Hier können Sie nur eines machen: Verwenden Sie (auch im
Sinne der Uebersichtlichkeit) kürzere Dateinamen.
2.10 Fehlermeldungen von MARS
-----------------------------
Auch während eines Kampfes zwischen zwei Redcode-Programmen können
verschiedene Fehler auftreten. Diese sind jedoch in der Regel sehr
selten und meistens eine Folge von Veränderungen eines schon
assemblierten, ausführbaren Kampfprogrammes durch einen Diskettenmonitor
oder ähnliches. Eine MARS-Fehlermeldung deutet deshalb oft auf eine
nach der Assemblierung veränderte Programmdatei hin, sei es nun
mutwillig oder durch eine fehlerhafte Diskette. Eine Ausnahme ist der
Fehler "Keine Objektdatei". Er kann auch dann auftreten, wenn anstelle
eines Kampfprogrammes ein noch nicht übersetzter Quelltext ausgeführt
werden soll, z. B. wenn Sie die Endung ".prg" beim Wählen eines
Kampfprogrammes nicht eingegeben haben. Hier folgt eine Liste aller
Fehlermeldungen, die bei einem Kampf auftreten können. Zu der
jeweiligen Fehlernummer ist die Meldung im Klartext und eine Erklärung
des Fehlers aufgeführt.
Fehler Nr. 1
Meldung: Illegaler Opcode im Programm
Beschreibung: Ein bereits übersetztes Programm enthält eine Anweisung,
die der MARS-Simulation nicht bekannt ist.
Abhilfe: Hier muss ein Diskettenfehler vorliegen. Der Assembler
kann nur Opcodes erzeugen, die MARS versteht. Assemblieren
Sie den Programmtext neu und versuchen Sie einen neuen
Kampf.
Fehler Nr. 2
Meldung: Illegaler Adressierungsmodus
Beschreibung: In einem bereits übersetzten Programm wird eine nicht
erlaubte Adressierungsart verwendet.
Abhilfe: Der Assembler kann wie bei Fehler Nr. 1 nur erlaubte
Adressierungsarten erzeugen. Massnahme siehe Fehler Nr. 1.
Fehler Nr. 3
Meldung: Ueberlauf in einer MARS-Zelle
Beschreibung: Ein ausführbares Programm enthält Argumente, die grösser
sind, als das MARS-Speicherfeld Zellen enthält: 8000.
Abhilfe: Der Redcode-Assembler kann nur Argumente erzeugen, die
kleiner oder gleich der grössten Adresse im MARS-Speicher
sind. Massnahme siehe Fehler Nr. 1.
Fehler Nr. 4
Meldung: Objektfile zu lang zum Einlesen
Beschreibung: Das Kampfprogramm kann wegen Ueberlänge nicht eingelesen
werden.
Abhilfe: Der Quelltext muss gekürzt und neu assembliert werden.
Versuchen Sie jedoch zuerst, den Quelltext unverändert neu
zu assemblieren.
Fehler Nr. 5
Meldung: Objektfile nicht gefunden
Beschreibung: Eines der beiden Kampfprogramme konnte unter dem
angegebenen Namen nicht gefunden werden.
Abhilfe: Ueberprüfen Sie den Pfadnamen und die Endung, die
normalerweise ".prg" sein sollte.
Fehler Nr. 6
Meldung: Kein richtiges Objektfile
Beschreibung: Bei der als Kampfprogramm angegebenen Datei handelt es
sich nicht um ein zuvor assembliertes Programm.
Abhilfe: Der MARS-Simulator hat zwar die Datei gefunden, die Sie
gewählt haben, diese ist jedoch nicht ausführbar. Haben
Sie an die Endung ".prg" gedacht?
Fehler Nr. 7
Meldung: Kampf durch Operator abgebrochen
Beschreibung: Ein Kampf wurde durch Anklicken des Abbruchgadgets
vorzeitig beendet.
Abhilfe: Keine eigentliche Fehlermeldung.
Fehler Nr. 8
Meldung: Kein Speicher verfügbar
Beschreibung: MARS bekommt vom Betriebssystem für das 8000 Zellen
umfassende Speicherfeld nicht genügend freien RAM-Speicher.
Abhilfe: Wenn zusätzlich zu Core Wars noch andere Programme auf
Ihrem Amiga laufen, kann es zu Speichermangel kommen.
Wenn dies eintritt, sollten Sie alle anderen,
gleichzeitig laufenden Programme beenden. Wenn Core Wars
aber alleine einen 512 KByte-Amiga zur Verfügung hat,
sollte dieser Fehler nicht auftreten. Amiga-Intern benötigt
eine MARS-Zelle 7 Bytes, das ganze Speicherfelde deshalb
56000 Bytes. Im Titelbalken der Workbench wird der freie
Speicher dauernd angezeigt, Sie können so ungefähr
abschätzen, wieviel Speicher noch fehlt.
2.10.1 Fehlender Speicherplatz
------------------------------
Es kann auf 512-KByte Amigas vorkommen, dass zuwenig Speicher zur
Verfügung steht, wenn ein neues Fenster (z.B. der Editor) geöffnet
werden soll. Core Wars versucht dann automatisch, die Workbench zu
schliessen, so dass nur noch der Core Wars Bildschirm vorhanden ist.
Wenn im Workbench-Bildschirm noch Fenster geöffnet sind, sollten diese
unbedingt mit der Maus geschlossen werden. Auch gleichzeitig laufende
Programme müssen gestoppt und verlassen werden, um mehr Speicher zu
erhalten.